import asyncio
clients = set()
async def handle_client(reader, writer):
clients.add(writer)
addr = writer.get_extra_info('peername')
print(f"{addr} 已连接")
try:
await broadcast(f"{addr} 已加入聊天室。\n")
writer.write("欢迎来到聊天室!\n".encode())
await writer.drain()
while True:
data = await reader.readline()
if not data:
break
message = data.decode().strip()
await broadcast(f"{addr}: {message}\n", exclude=writer)
finally:
clients.remove(writer)
await broadcast(f"{addr} 已离开聊天室。\n")
writer.close()
await writer.wait_closed()
print(f"{addr} 已断开连接")
async def broadcast(message, exclude=None):
for client in clients:
if client != exclude:
client.write(message.encode())
await client.drain()
async def main():
server = await asyncio.start_server(handle_client, 'localhost', 8000)
addr = server.sockets[0].getsockname()
print(f'聊天服务器运行在 {addr}')
async with server:
await server.serve_forever()
if __name__ == "__main__":
asyncio.run(main())
上一篇:js
下一篇:gg
共 0 条评论关于"python聊天室"
最新评论